//
//  ApiResponse.swift
//  hello
//
//  Created by yafei li on 2025/9/12.
//


import Vapor

// 通用 RESTful 响应结构
struct ApiResponse<T: Content>: Content {
    var code: Int          // 自定义业务状态码或 HTTP 状态码
    var message: String?   // 可选的消息提示，如错误信息
    var data: T?           // 可选的响应数据，泛型支持不同数据类型
    
    // 成功响应（有数据）的便捷初始化方法
    static func success(data: T? = nil, message: String? = "操作成功") -> ApiResponse {
        return ApiResponse(code: 0, message: message, data: data)
    }
    
    // 失败响应（无数据或错误数据）的便捷初始化方法
    static func failure(code: Int, message: String? = "操作失败") -> ApiResponse {
        // 注意：失败时返回的 data 为 nil，泛型类型需能处理可选值，这里使用 T? 并传入 nil。
        // 实际调用时，可能需要指定泛型类型，如 ApiResponse<SomeType>.failure(...)
        return ApiResponse(code: code, message: message, data: nil)
    }
}

// 适用于列表分页数据的响应结构
struct PaginatedApiResponse<T: Content>: Content {
    var code: Int
    var message: String?
    var data: [T]?     // 数据数组
    var total: Int     // 总记录数
    var page: Int?     // 当前页码
    var size: Int?     // 每页大小
    
    static func success(data: [T]? = nil, total: Int, page: Int? = nil, size: Int? = nil, message: String? = nil) -> PaginatedApiResponse {
        return PaginatedApiResponse(code: 0, message: message, data: data, total: total, page: page, size: size)
    }
}
